package com.qfjy.project.weixin.api.messageCustom;

import com.qfjy.project.weixin.api.accessToken.AccessTokenRedisUtil;
import com.qfjy.project.weixin.api.messageCustom.bean.MessageBean;
import com.qfjy.project.weixin.api.messageCustom.bean.MessageCustom;
import com.qfjy.project.weixin.util.WeixinUtil;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @ClassName MessageCustomUtil
 * @Description TODO
 * @Author guoweixin
 * @Date 2022/12/5
 * @Version 1.0
 */
@Component
@Slf4j
public class MessageCustomUtil {
    /**
     当用户和公众号产生特定动作的交互时（具体动作列表请见下方说明），
     微信将会把消息数据推送给开发者，
     开发者可以在一段时间内（目前为48小时，2021年6月1日后启用新规则，查看公告）调用客服接口，
     通过 POST 一个 JSON 数据包来发送消息给普通用户。
     此接口主要用于客服等有人工消息处理环节的功能，方便开发者为用户提供更加优质的服务。
     https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html#%E5%AE%A2%E6%9C%8D%E6%8E%A5%E5%8F%A3-%E5%8F%91%E6%B6%88%E6%81%AF
     */

    /**
     客服接口 - 发消息
     接口调用请求说明
     http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN
     */
    private static String  WEIXIN_POST_MESSAGE_CUSTOM="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";

    /**
     *
     * @param openid 微信openid
     * @param content 发送的内容文本
     */
    public void sendMessageText(String openid,String content){
        //1、封装对象
        MessageBean messageBean=new MessageBean();
        messageBean.setTouser(openid);
        messageBean.setMsgtype("text");
        MessageCustom messageCustom=new MessageCustom();
        messageCustom.setContent(content);
        messageBean.setText(messageCustom);
        //2、对象转变成JSON对象
        JSONObject jsonObject=JSONObject.fromObject(messageBean);
        log.info("发送客服消息：{}",jsonObject.toString());

        //3、发送请求 调用API接口
        String url=WEIXIN_POST_MESSAGE_CUSTOM.replace("ACCESS_TOKEN",accessTokenRedisUtil.getAccessTokenValue());

        WeixinUtil.httpRequest(url,"POST",jsonObject.toString());
    }


    /** Redis AccessTokenUtil*/
    @Autowired
    private AccessTokenRedisUtil accessTokenRedisUtil;
}
